home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1980-01-01 | 1.9 KB | 106 lines |
- 10 '
- 20 ' AMAZE
- 30 '
- 40 '
- 50 CLEAR
- 60 SCREEN 1
- 70 CLS
- 80 KEY OFF
- 90 COLOR 0,1
- 100 LOCATE 12,12
- 110 PRINT "*** AMAZE ***"
- 120 GOSUB 760
- 130 CLS
- 140 LOCATE 7,1
- 150 INPUT "How many paths wide ";WIDE
- 160 IF WIDE>0 AND WIDE<160 THEN 200
- 170 PRINT "Valid range is 1 TO 99"
- 180 BEEP
- 190 GOTO 150
- 200 INPUT "How many paths high ";HIGH
- 210 IF HIGH>0 AND HIGH<100 THEN 260
- 220 PRINT "Valid range is 1 to 99"
- 230 BEEP
- 240 GOTO 200
- 250 '
- 260 WINC=320\(WIDE+1)
- 270 HINC=200\(HIGH+1)
- 280 CLS
- 290 LINE (0,0)-(WIDE*WINC,HIGH*HINC),,B
- 300 COUNT=WIDE*HIGH
- 310 FOR I=0 TO COUNT
- 320 PTR=(PTR+997) MOD COUNT
- 330 X=INT(PTR/HIGH)
- 340 Y=PTR-X*HIGH
- 350 X=X*WINC
- 360 Y=Y*HINC
- 370 IF POINT(X,Y) THEN 600
- 380 DIR=INT(4*RND+1)
- 390 DIR2=DIR
- 400 DIR=DIR MOD 4+1
- 410 XN=((DIR=1)-(DIR=3))*WINC+X
- 420 YN=((DIR=2)-(DIR=4))*HINC+Y
- 430 IF POINT(XN,YN)=0 THEN 550
- 440 LINE (X,Y)-(XN,YN)
- 450 DIR=INT(4*RND+1)
- 460 FOR K=1 TO 4
- 470 DIR=DIR MOD 4+1
- 480 XN=((DIR=1)-(DIR=3))*WINC+X
- 490 YN=((DIR=2)-(DIR=4))*HINC+Y
- 500 IF POINT(XN,YN) THEN 590
- 510 LINE (X,Y)-(XN,YN)
- 520 X=XN
- 530 Y=YN
- 540 GOTO 450
- 550 IF DIR<>DIR2 THEN 580
- 560 X=XN
- 570 Y=YN
- 580 GOTO 400
- 590 NEXT K
- 600 NEXT I
- 610 '
- 620 'OPEN THE DOORS ON EACH SIDE
- 630 Y=(HIGH\2)*HINC
- 640 LINE (0,Y)-(0,Y+HINC),0
- 650 LINE (WIDE*WINC,Y)-(WIDE*WINC,Y+HINC),0
- 660 '
- 670 ' DONE ...
- 680 ' IF USER PRESSES "P" THEN DUMP GRAPHICS TO PRINTER,
- 690 ' ELSE DRAW ANOTHER MAZE WHENEVER ANY KEY IS PRESSED.
- 700 K$=INKEY$
- 710 IF K$="" THEN 700
- 720 IF K$="P" OR K$="p" THEN GOSUB 870
- 730 GOTO 130
- 740 '
- 750 ' WAIT FOR USER AND BE RANDOMIZING THE GENERATOR
- 760 LOCATE 25,9
- 770 PRINT"Press any key to begin";
- 780 RNDM=RND
- 790 K$=INKEY$
- 800 IF K$="" THEN 780
- 810 RANDOMIZE 64000 * RND - 32000
- 820 LOCATE 25,1
- 830 PRINT SPACE$(39);
- 840 RETURN
- 850 '
- 860 ' Subroutine to dump graphic maze to printer
- 870 DEF SEG=&HB800
- 880 E$=CHR$(27)
- 890 WIDTH "LPT1:",255
- 900 LPRINT E$+"1";
- 910 LPRINT E$+"W"+CHR$(1);
- 920 FOR ROW=0 TO 79
- 930 A$=""
- 940 FOR COL=99 TO 0 STEP -1
- 950 LOCA$=CHR$(PEEK(COL*80+ROW))
- 960 LOCB$=CHR$(PEEK(COL*80+ROW+&H2000))
- 970 A$=A$+LOCB$+LOCB$
- 980 A$=A$+LOCA$+LOCA$
- 990 IF COL<>49 THEN 1020
- 1000 LPRINT E$+"K"+CHR$(144)+CHR$(1)+A$;
- 1010 A$=""
- 1020 NEXT COL
- 1030 LPRINT A$
- 1040 NEXT ROW
- 1050 RETURN
-